package com.netcracker.training.automonic.dao.roles;

import com.netcracker.training.automonic.dao.entities.Attribute;
import com.netcracker.training.automonic.dao.entities.AttributeType;
import com.netcracker.training.automonic.dao.entities.Object;
import com.netcracker.training.automonic.dao.entities.Site;
import com.netcracker.training.automonic.dao.entities.Statistics;
import com.netcracker.training.automonic.dao.entities.StatsType;

/**
 * DAO role.
 * 
 * <p>Rights: WRITE ONLY.
 * 
 * <p>Recommend to use only for data collection. 
 * 
 * @author Vadim Gidulyan
 * 
 * @see ReadWriteDAO
 * @see ReadDAO
 */

public interface WriteDAO // TODO Javadoc
{

	/**
	 * Creates a new site with specified name.
	 * 
	 * @param name site name
	 * 
	 * @return new site with specified name
	 */
	Site createSite(String name);
	
	/**
	 * Creates a new object with specified site and name.
	 * 
	 * @param site site
	 * @param name name
	 * 
	 * @return new object with specified site and name
	 */
	Object createObject(Site site, String name);
	
	/**
	 * Creates a new attribute type with specified code and name.
	 * 
	 * @param code code
	 * @param name name
	 * 
	 * @return new attribute type with specified code and name
	 */
	AttributeType createAttributeType(String code, String name);
	
	/**
	 * Creates a new attribute with specified object and attribute type.
	 * 
	 * @param object object
	 * @param attributeType attribute type
	 * 
	 * @return new attribute with specified object and attribute type
	 */
	Attribute createAttribute(Object object, AttributeType attributeType);
	
	/**
	 * Creates a new statistics type with specified code and name.
	 * 
	 * @param code code
	 * @param name name
	 * 
	 * @return new statistics type with specified code and name
	 */
	StatsType createStatsType(String code, String name);
	
	/**
	 * Creates a new statistics with specified object and statistics type.
	 * 
	 * @param object object
	 * @param statsType statistics type
	 * 
	 * @return new statistics with specified object and statistics type
	 */
	Statistics createStatistics(Object object, StatsType statsType);

}
